Em Ruby, uma chamada de método não é um salto estático para um endereço de memória; é um evento dinâmico de Envio de Mensagem. Quando você invoca um método, está enviando uma mensagem para um Destinatário. Essa mensagem consiste no nome do método, argumentos opcionais e uma possível Associação de Bloco.
1. Sintaxe de Chamada e Ambiguidade
Ruby permite grande flexibilidade: Foo.Bar e Foo.Bar() são idênticos. No entanto, Foo::Bar geralmente se refere a uma constante, enquanto Foo::Bar() força uma chamada de método. Parênteses são frequentemente omitidos para criar experiências semelhantes a DSLs, onde métodos parecem propriedades.
2. Desconstrução de Operadores
Operadores são na verdade Métodos Redefiníveis. A expressão expr1 + expr2 é açúcar sintático para (expr1).+(expr2). Isso se aplica a operadores unários (-obj), binários (a < b), e operadores pósfixos.
3. Mecanismo yield
Métodos usam yield para empurrar o fluxo de controle para o bloco associado. Usando Kernel.block_given?, um método pode decidir dinamicamente como lidar com a lógica com base no contexto do chamador.